home *** CD-ROM | disk | FTP | other *** search
/ PC Player 2004 May / pc player 2004-05.iso / Demos / FarCry / Data1.cab / _07CD1340D7EF467CB5F3588DCFB62B82 < prev    next >
Encoding:
Text File  |  2004-01-06  |  1.9 KB  |  52 lines

  1.  
  2.       #include "../CGVPMacro.csi"
  3.  
  4.  
  5.       VertAttributes { POSITION_3 TEXCOORD0_2 PRIM_COLOR TANG_3X3 }
  6.       MainInput { VIEWPROJ_MATRIX, uniform float3x4 ObjToCubeSpace, uniform float3 CameraPos, uniform float4 Constants }
  7.       DeclarationsScript
  8.       {
  9.         IN_T0_C0_TANG
  10.         OUT_T0_T1_T2_T3_C0
  11.       }
  12.       PositionScript = PosCommon
  13.       CoreScript
  14.       {
  15.         // pass texture coordinates for fetching the normal map
  16.         OUT.Tex0 = IN.TexCoord0;
  17.  
  18.         float3 eyeVector = CameraPos.xyz - vPos.xyz;
  19.  
  20.         TANG_MATR
  21.  
  22.         float3 trEyeVector = mul(objToTangentSpace, eyeVector);
  23.         
  24.         // fTemp = sqrt(n^2*|EYE|^2 - (EYE.x^2 + EYE.y^2)) - EYE.z
  25.         float3 eye2D = trEyeVector;
  26.         eye2D.z = 0;
  27.         float fTemp = sqrt(Constants.y*Constants.y*dot(trEyeVector, trEyeVector) - dot(eye2D, eye2D)) - trEyeVector.z;
  28.  
  29.         // Set the refraction matrix
  30.         // | REFRACT_0 |   | -TEMP.w   0       EYE.x*TEMP.w |
  31.         // | REFRACT_1 | = |  0       -TEMP.w  EYE.y*TEMP.w |
  32.         // | REFRACT_2 |   | -EYE.x   -EYE.y   -EYE.z       |
  33.         float3x3 refrMatr;
  34.         refrMatr[0] = float3(-fTemp, 0, fTemp * trEyeVector.x);
  35.         refrMatr[1] = float3(0, -fTemp, fTemp * trEyeVector.y);
  36.         refrMatr[2] = -trEyeVector;
  37.         
  38.         refrMatr[0] = refrMatr[0] * Constants.x;
  39.         refrMatr[1] = refrMatr[1] * Constants.x;
  40.         
  41.         // Calculate the 3x3 matrix for the pixel shader texm3x3tex
  42.         float3 vTemp0 = mul(objToTangentSpace, ObjToCubeSpace[0].xyz);
  43.         float3 vTemp1 = mul(objToTangentSpace, ObjToCubeSpace[1].xyz);
  44.         float3 vTemp2 = mul(objToTangentSpace, ObjToCubeSpace[2].xyz);
  45.  
  46.         OUT.Tex1.xyz = mul(refrMatr, vTemp0);
  47.         OUT.Tex2.xyz = mul(refrMatr, vTemp1);
  48.         OUT.Tex3.xyz = mul(refrMatr, vTemp2);
  49.         
  50.         OUT.Color = IN.Color;
  51.       }
  52.